package com.lanou3g.hw0409;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created by dllo on 18/4/9.
 *
 *
 *单例模式 ,把用户存在单例中
 *
 *
 */
public class Util {

//    /**
//     * 登录
//     * @param user 传过来的用户信息,里面存着用户名和密码
//     * @return  登陆成功,返回true,登录失败,放回false
//     */
//    public boolean login(User user) {
//       // System.out.println("正在开发");
//
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请输入用户名");
//        String username = scanner.nextLine();
//        boolean usernameRight = username.equals(user.getUsername());
//        System.out.println("请输入密码:");
//        String pwd = scanner.nextLine();
//        boolean pwdRight = pwd.equals(user.getPwd());
//
//
//        return usernameRight && pwdRight; // 一假即假
//    }
//
////    public void register(User user){  //void 注册绝对会成功   boolean 注册成功或失败
////
////    }
//
//    /**
//     * /** +回车  标准的文档注释
//     * <p>
//     * 注册方法
//     *
//     * @return 注册完成后, 把用户名 密码存到User中,返回
//     */
//    public User register() {   //绝对会注册成功,直接返回用户
//
//        //创建一个User对象,是为了存储用户名和密码
//        User user = new User();
//        Scanner scanner = new Scanner(System.in);
//
//        //1.拿到用户名
//        while (true) {
//            System.out.println("请输入用户名");
//            String username = scanner.nextLine();
//            boolean isStartWithNum = false;
//            for (int i = 0; i < 10; i++) {
//                String num = String.valueOf(i);
//                if (username.startsWith(num)) {
//                    //如果以任何一个数字开头,isStartWithNum 就会变成true
//                    isStartWithNum = true;
//                }
//            }
//            if (!isStartWithNum) {
//                //用户输入正确,不需要再输入了,
//                //提前把用户名存在user对象中
//                user.setUsername(username);
//                break;
//            }
//        }
//        //1.1把用户名放到user里
//
//
//        //2.拿到密码
//        String pwd = null;
//        while (true) {
//            System.out.println("请输入密码");
//            pwd = scanner.nextLine();
//
//            //// TODO: 18/4/9 判断八位以上
//            // 是否包含数字
//            boolean hasNum = false;
//            for (int i = 0; i < 10; i++) {
//                String num = String.valueOf(i);
//                if (pwd.contains(num)) {
//                    hasNum = true;
//                }
//            }
//            if (!hasNum) {
//                // 没有数字
//                System.out.println("密码需要包含数字");
//                continue;  //跳过此次循环,进入while的下一次循环
//            }
//
//            //小写字母
//            boolean hasLowerCase = false;
//            for (char c = 'a'; c <= 'z'; c++) {
//                String letter = String.valueOf(c);
//                if (pwd.contains(letter)){
//                    hasLowerCase = true;
//                }
//            }
//
//            if (!hasLowerCase){
//                System.out.println("密码需要包含小写字母");
//                continue;
//            }
//
//            //大写字母
//            boolean hasUperCase = false;
//            for (char c = 'A';c <= 'Z';c++){
//                String letter = String.valueOf(c);
//                if (pwd.contains(letter)){
//                    hasUperCase = true;
//                }
//            }
//
//            if (!hasUperCase){
//                System.out.println("密码需要包含大写字母");
//                continue;
//            }
//
//            break; // 密码满足条件 ,代码能执行到这一句,证明用户输入的密码完全没有问题,可以跳出循环去确认密码了
//
//        }
//
//        //3.拿到确认密码
//
//        while (true){
//
//            System.out.println("再次输入密码:");
//            String rePwd = scanner.nextLine();
//            if (pwd.equals(rePwd)){
//                //确认密码和密码一样
//                //把密码保存到User中
//                user.setPwd(pwd);
//                break; // 满足条件后,跳出循环
//            }else{
//                System.out.println("密码和确认密码不一致");
//            }
//
//        }
//        //3.1把密码放到user中
//
//        //经过一系列操作后,把存储着用户名和密码的对象返回
//        return user;
//
//    }
//
//

    /**
     * 登录
     * @param user 传过来的用户信息,里面存着用户名和密码
     * @return  登陆成功,返回true,登录失败,放回false
     */
    //验证一个用户的登录
    public boolean login(User user) {     //输入输出要与核心逻辑功能分开,以便以后增加新功能,不改变原有方法(代码遵循 单一职责 原则)
                                           // 登录和注册都可以重构,将核心逻辑与输入输出分开,可以使用继承
        // System.out.println("正在开发");

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = scanner.nextLine();
        boolean usernameRight = username.equals(user.getUsername());
        System.out.println("请输入密码:");
        String pwd = scanner.nextLine();
        boolean pwdRight = pwd.equals(user.getPwd());


        return usernameRight && pwdRight; // 一假即假
    }

    //验证多个用户
    public boolean login(ArrayList<User> users){

        boolean canLogin = false;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = scanner.nextLine();

        System.out.println("请输入密码:");
        String pwd = scanner.nextLine();

        //增强for循环 ,遍历users
        for (User user: users){
            //如果用户名 密码匹配成功,只要有一个成个,则匹配成功
            if (username.equals(user.getUsername()) && pwd.equals(user.getPwd())){
                canLogin = true;  //只要有一个登录成功,则true

            }
        }
        return canLogin;


    }




//    public void register(User user){  //void 注册绝对会成功   boolean 注册成功或失败
//
//    }

    /**
     * /** +回车  标准的文档注释
     * <p>
     * 注册方法
     *
     * @return 注册完成后, 把用户名 密码存到User中,返回
     */
    public User register() {   //绝对会注册成功,直接返回用户

        //创建一个User对象,是为了存储用户名和密码
        User user = new User();
        Scanner scanner = new Scanner(System.in);

        //1.拿到用户名
        while (true) {
            System.out.println("请输入用户名");
            String username = scanner.nextLine();
            boolean isStartWithNum = false;
            for (int i = 0; i < 10; i++) {
                String num = String.valueOf(i);
                if (username.startsWith(num)) {
                    //如果以任何一个数字开头,isStartWithNum 就会变成true
                    isStartWithNum = true;
                }
            }
            if (!isStartWithNum) {
                //用户输入正确,不需要再输入了,
                //提前把用户名存在user对象中
                user.setUsername(username);
                break;
            }
        }
        //1.1把用户名放到user里


        //2.拿到密码
        String pwd = null;
        while (true) {
            System.out.println("请输入密码");
            pwd = scanner.nextLine();

            //// TODO: 18/4/9 判断八位以上
            // 是否包含数字
            boolean hasNum = false;
            for (int i = 0; i < 10; i++) {
                String num = String.valueOf(i);
                if (pwd.contains(num)) {
                    hasNum = true;
                }
            }
            if (!hasNum) {
                // 没有数字
                System.out.println("密码需要包含数字");
                continue;  //跳过此次循环,进入while的下一次循环
            }

            //小写字母
            boolean hasLowerCase = false;
            for (char c = 'a'; c <= 'z'; c++) {
                String letter = String.valueOf(c);
                if (pwd.contains(letter)){
                    hasLowerCase = true;
                }
            }

            if (!hasLowerCase){
                System.out.println("密码需要包含小写字母");
                continue;
            }

            //大写字母
            boolean hasUperCase = false;
            for (char c = 'A';c <= 'Z';c++){
                String letter = String.valueOf(c);
                if (pwd.contains(letter)){
                    hasUperCase = true;
                }
            }

            if (!hasUperCase){
                System.out.println("密码需要包含大写字母");
                continue;
            }

            break; // 密码满足条件 ,代码能执行到这一句,证明用户输入的密码完全没有问题,可以跳出循环去确认密码了

        }

        //3.拿到确认密码

        while (true){

            System.out.println("再次输入密码:");
            String rePwd = scanner.nextLine();
            if (pwd.equals(rePwd)){
                //确认密码和密码一样
                //把密码保存到User中
                user.setPwd(pwd);
                break; // 满足条件后,跳出循环
            }else{
                System.out.println("密码和确认密码不一致");
            }

        }
        //3.1把密码放到user中

        //经过一系列操作后,把存储着用户名和密码的对象返回
        return user;

    }





}
